home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / alsa / sound / ainstr_simple.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  5KB  |  161 lines

  1. /*
  2.  *  Advanced Linux Sound Architecture
  3.  *
  4.  *  Simple (MOD player) Instrument Format
  5.  *  Copyright (c) 1994-99 by Jaroslav Kysela <perex@suse.cz>
  6.  *
  7.  *
  8.  *   This program is free software; you can redistribute it and/or modify
  9.  *   it under the terms of the GNU General Public License as published by
  10.  *   the Free Software Foundation; either version 2 of the License, or
  11.  *   (at your option) any later version.
  12.  *
  13.  *   This program is distributed in the hope that it will be useful,
  14.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *   GNU General Public License for more details.
  17.  *
  18.  *   You should have received a copy of the GNU General Public License
  19.  *   along with this program; if not, write to the Free Software
  20.  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  21.  *
  22.  */
  23.  
  24. #ifndef __SOUND_AINSTR_SIMPLE_H
  25. #define __SOUND_AINSTR_SIMPLE_H
  26.  
  27. #ifndef __KERNEL__
  28. #define __KERNEL__
  29. #include <asm/types.h>
  30. #include <asm/byteorder.h>
  31. #undef __KERNEL__
  32. #endif
  33.  
  34. /*
  35.  *  share types (share ID 1)
  36.  */
  37.  
  38. #define SIMPLE_SHARE_FILE        0
  39.  
  40. /*
  41.  *  wave formats
  42.  */
  43.  
  44. #define SIMPLE_WAVE_16BIT        0x0001  /* 16-bit wave */
  45. #define SIMPLE_WAVE_UNSIGNED        0x0002  /* unsigned wave */
  46. #define SIMPLE_WAVE_INVERT        0x0002  /* same as unsigned wave */
  47. #define SIMPLE_WAVE_BACKWARD        0x0004  /* backward mode (maybe used for reverb or ping-ping loop) */
  48. #define SIMPLE_WAVE_LOOP        0x0008  /* loop mode */
  49. #define SIMPLE_WAVE_BIDIR        0x0010  /* bidirectional mode */
  50. #define SIMPLE_WAVE_STEREO        0x0100    /* stereo wave */
  51. #define SIMPLE_WAVE_ULAW        0x0200    /* uLaw compression mode */
  52.  
  53. /*
  54.  *  instrument effects
  55.  */
  56.  
  57. #define SIMPLE_EFFECT_NONE        0
  58. #define SIMPLE_EFFECT_REVERB        1
  59. #define SIMPLE_EFFECT_CHORUS        2
  60. #define SIMPLE_EFFECT_ECHO        3
  61.  
  62. /*
  63.  *  instrument info
  64.  */
  65.  
  66. typedef struct simple_instrument_info {
  67.     unsigned int format;        /* supported format bits */
  68.     unsigned int effects;        /* supported effects (1 << SIMPLE_EFFECT_*) */
  69.     unsigned int max8_len;        /* maximum 8-bit wave length */
  70.     unsigned int max16_len;        /* maximum 16-bit wave length */
  71. } simple_instrument_info_t;
  72.  
  73. /*
  74.  *  Instrument
  75.  */
  76.  
  77. typedef struct {
  78.     unsigned int share_id[4];    /* share id - zero = no sharing */
  79.     unsigned int format;        /* wave format */
  80.  
  81.     struct {
  82.         unsigned int number;    /* some other ID for this instrument */
  83.         unsigned int memory;    /* begin of waveform in onboard memory */
  84.         unsigned char *ptr;    /* pointer to waveform in system memory */
  85.     } address;
  86.  
  87.     unsigned int size;        /* size of waveform in samples */
  88.     unsigned int start;        /* start offset in samples * 16 (lowest 4 bits - fraction) */
  89.     unsigned int loop_start;    /* loop start offset in samples * 16 (lowest 4 bits - fraction) */
  90.     unsigned int loop_end;        /* loop end offset in samples * 16 (lowest 4 bits - fraction) */
  91.     unsigned short loop_repeat;    /* loop repeat - 0 = forever */
  92.  
  93.     unsigned char effect1;        /* effect 1 */
  94.     unsigned char effect1_depth;    /* 0-127 */
  95.     unsigned char effect2;        /* effect 2 */
  96.     unsigned char effect2_depth;    /* 0-127 */
  97. } simple_instrument_t;
  98.  
  99. /*
  100.  *
  101.  *    Kernel <-> user space
  102.  *    Hardware (CPU) independent section
  103.  *
  104.  *    * = zero or more
  105.  *    + = one or more
  106.  *
  107.  *    simple_xinstrument    SIMPLE_STRU_INSTR
  108.  *
  109.  */
  110.  
  111. #define SIMPLE_STRU_INSTR    __cpu_to_be32(('I'<<24)|('N'<<16)|('S'<<8)|'T')
  112.  
  113. /*
  114.  *  Instrument
  115.  */
  116.  
  117. typedef struct simple_xinstrument {
  118.     __u32 stype;
  119.  
  120.     __u32 share_id[4];        /* share id - zero = no sharing */
  121.     __u32 format;            /* wave format */
  122.  
  123.     __u32 size;            /* size of waveform in samples */
  124.     __u32 start;            /* start offset in samples * 16 (lowest 4 bits - fraction) */
  125.     __u32 loop_start;        /* bits loop start offset in samples * 16 (lowest 4 bits - fraction) */
  126.     __u32 loop_end;            /* loop start offset in samples * 16 (lowest 4 bits - fraction) */
  127.     __u16 loop_repeat;        /* loop repeat - 0 = forever */
  128.     
  129.     __u8 effect1;            /* effect 1 */
  130.     __u8 effect1_depth;        /* 0-127 */
  131.     __u8 effect2;            /* effect 2 */
  132.     __u8 effect2_depth;        /* 0-127 */
  133. } simple_xinstrument_t;
  134.  
  135. #ifdef __KERNEL__
  136.  
  137. #include "seq_instr.h"
  138.  
  139. extern char *snd_seq_simple_id;
  140.  
  141. typedef struct {
  142.     void *private_data;
  143.     int (*info)(void *private_data, simple_instrument_info_t *info);
  144.     int (*put_sample)(void *private_data, simple_instrument_t *instr,
  145.                       char *data, long len, int atomic);
  146.     int (*get_sample)(void *private_data, simple_instrument_t *instr,
  147.               char *data, long len, int atomic);
  148.     int (*remove_sample)(void *private_data, simple_instrument_t *instr,
  149.                  int atomic);
  150.     void (*notify)(void *private_data, snd_seq_kinstr_t *instr, int what);
  151.     snd_seq_kinstr_ops_t kops;
  152. } snd_simple_ops_t;
  153.  
  154. int snd_seq_simple_init(snd_simple_ops_t *ops,
  155.             void *private_data,
  156.             snd_seq_kinstr_ops_t *next);
  157.  
  158. #endif
  159.  
  160. #endif /* __SOUND_AINSTR_SIMPLE_H */
  161.